---
id: 接口与别名的区别
title: 接口与别名的区别
---

## 相同点

### 类型和别名都可以描述对象

```ts
type UserInfo = {
  name: string;
  age: number;
};

interface UserInfo {
  name: string;
  age: number;
}
```

### 类型和别名都支持扩展

```ts
// 类型别名扩展 使用 & 符
type UserInfo1 = {
  name: string;
  age: number;
};

type UserInfo11 = UserInfo1 & { sex: number };

// 接口扩展 可以自动合并和使用 extends 关键字
interface UserInfo2 {
  name: string;
  age: number;
}

interface UserInfo2 {
  sex: number;
}

interface UserInfo22 extends UserInfo2 {
  school: string;
}
```

## 不同点

1. type 的值可以直接是原始对象， interface 不行。
2. 扩展方法不同。

## 使用场景

### 类型别名

- 定义基本类型的别名时。
- 定义元组类型时。
- 定义西数类型时。
- 定义联合类型时。
- 定义映射类型时。

### 接口

- 需要利用接口自动合并特性的时候。
- 定义对象类型且无需使用 type 的时候。
